#ifndef _NODE__H_
#define _NODE__H_

#include <string>

namespace node{

class Node{
public:
	enum KindNode { k_undefined, k_iteral, k_operator };
	Node();
	Node(Node* left, Node* right);
	virtual ~Node();

	void Left(Node* left) { left_ = left; }
	void Right(Node* right) { right_ = right; }
	void Parent(Node* parent) { parent_ = parent; }

	Node* Left() { return left_; }
	Node* Right() { return right_; }
	Node* Parent() { return parent_; }

	KindNode Kind() { return kind_; }
	void Kind(KindNode n) { kind_ = n; }

	virtual std::string Execute() = 0;
private:
	KindNode kind_;
	Node * left_;
	Node * right_;
	Node * parent_;
};

}

#endif /* _NODE__H_ */

